package com.example.texted.wordtopdf;

import com.Ostermiller.util.CircularByteBuffer;
import org.docx4j.Docx4J;
import org.docx4j.convert.out.FOSettings;
import org.docx4j.fonts.IdentityPlusMapper;
import org.docx4j.fonts.Mapper;
import org.docx4j.fonts.PhysicalFonts;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.junit.Test;

import java.io.*;

/**
 * Created with IntelliJ IDEA.
 * User: xiuyuan
 * Date: 2021/04/01
 * Time: 14:57
 * Description: No Description
 */
public class test3 {
    @Test
    public void test11111() throws IOException {

        File file = new File("C:\\Users\\KuroNeko\\Desktop\\15.doc");
        File file1 = new File("C:\\Users\\KuroNeko\\Desktop\\15.pdf");
        CircularByteBuffer cbb = new CircularByteBuffer(CircularByteBuffer.INFINITE_SIZE);

        try {
            FileInputStream fileInputStream = new FileInputStream(file);
//            FileOutputStream fileOutputStream = new FileOutputStream(file1);
            long l = System.currentTimeMillis();
            test3.exportPdfForDoc4j(fileInputStream,cbb.getOutputStream());
            System.out.println(System.currentTimeMillis()-l);

        }catch (Exception e){
            e.printStackTrace();
        }
        byte[] buffer = new byte[1024];
        int n;
        while ((n = cbb.getInputStream().read(buffer)) != -1) { // 读取到缓冲区
            System.out.println("read " + n + " bytes.");
        }
        cbb.getInputStream().close();
        cbb.clear();
    }

    public static void exportPdfForDoc4j(InputStream word, OutputStream pdf){

        OutputStream os = null;
        try {
            //                                                                      byte[] file
            WordprocessingMLPackage mlPackage = WordprocessingMLPackage.load(word);
            //Mapper fontMapper = new BestMatchingMapper();
            Mapper fontMapper = new IdentityPlusMapper();

            fontMapper.put("隶书", PhysicalFonts.get("LiSu"));
            fontMapper.put("宋体", PhysicalFonts.get("SimSun"));
            fontMapper.put("微软雅黑", PhysicalFonts.get("Microsoft Yahei"));
            fontMapper.put("黑体", PhysicalFonts.get("SimHei"));
            fontMapper.put("楷体", PhysicalFonts.get("KaiTi"));
            fontMapper.put("新宋体", PhysicalFonts.get("NSimSun"));
            fontMapper.put("华文行楷", PhysicalFonts.get("STXingkai"));
            fontMapper.put("华文仿宋", PhysicalFonts.get("STFangsong"));
            fontMapper.put("仿宋", PhysicalFonts.get("FangSong"));
            fontMapper.put("幼圆", PhysicalFonts.get("YouYuan"));
            fontMapper.put("华文宋体", PhysicalFonts.get("STSong"));
            fontMapper.put("华文中宋", PhysicalFonts.get("STZhongsong"));
            fontMapper.put("等线", PhysicalFonts.get("SimSun"));
            fontMapper.put("等线 Light", PhysicalFonts.get("SimSun"));
            fontMapper.put("华文琥珀", PhysicalFonts.get("STHupo"));
            fontMapper.put("华文隶书", PhysicalFonts.get("STLiti"));
            fontMapper.put("华文新魏", PhysicalFonts.get("STXinwei"));
            fontMapper.put("华文彩云", PhysicalFonts.get("STCaiyun"));
            fontMapper.put("方正姚体", PhysicalFonts.get("FZYaoti"));
            fontMapper.put("方正舒体", PhysicalFonts.get("FZShuTi"));
            fontMapper.put("华文细黑", PhysicalFonts.get("STXihei"));
            fontMapper.put("宋体扩展",PhysicalFonts.get("simsun-extB"));
            fontMapper.put("仿宋_GB2312",PhysicalFonts.get("FangSong_GB2312"));
            fontMapper.put("新細明體",PhysicalFonts.get("SimSun"));
            mlPackage.setFontMapper(fontMapper);




            FOSettings foSettings = Docx4J.createFOSettings();
            foSettings.setWmlPackage(mlPackage);
            Docx4J.toFO(foSettings, pdf, Docx4J.FLAG_EXPORT_PREFER_XSL);

        }catch(Exception ex){
            ex.printStackTrace();
        }finally {
            try {
                if (os != null) {
                    os.close();
                }
                pdf.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}
